home *** CD-ROM | disk | FTP | other *** search
/ Pascal Super Library / Pascal Super Library (CW International)(1997).bin / MATH / NRPAS13 / ADI.DEM < prev    next >
Text File  |  1991-04-29  |  1KB  |  60 lines

  1. PROGRAM d17r2(input,output);
  2. (* driver for routine ADI *)
  3. LABEL 1;
  4. CONST
  5.    jmax=11;
  6.    pi=3.1415926;
  7. TYPE
  8.    double = real;
  9.    gljmax = ARRAY [1..jmax,1..jmax] OF double;
  10. VAR
  11.    alim,alpha,beta,eps : double;
  12.    i,j,k,mid,twotok : integer;
  13.    a,b,c,d,e,f,g,u : gljmax;
  14.  
  15. (*$I ADI.PAS *)
  16.  
  17. BEGIN
  18.    FOR i := 1 to jmax DO BEGIN
  19.       FOR j := 1 to jmax DO BEGIN
  20.          a[i,j] := -1.0;
  21.          b[i,j] := 2.0;
  22.          c[i,j] := -1.0;
  23.          d[i,j] := -1.0;
  24.          e[i,j] := 2.0;
  25.          f[i,j] := -1.0;
  26.          g[i,j] := 0.0;
  27.          u[i,j] := 0.0
  28.       END
  29.    END;
  30.    mid := (jmax DIV 2)+1;
  31.    g[mid,mid] := 2.0;
  32.    alpha := 2.0*(1.0-cos(pi/jmax));
  33.    beta := 2.0*(1.0-cos((jmax-1)*pi/jmax));
  34.    alim := ln(4.0*jmax/pi);
  35.    k := 0;
  36.    twotok := 1;
  37.    REPEAT
  38.       k := k+1;
  39.       twotok := 2*twotok;
  40.    UNTIL twotok >= alim;
  41.    eps := 1.0e-4;
  42.    adi(a,b,c,d,e,f,g,u,jmax,k,alpha,beta,eps);
  43.    writeln('ADI Solution:');
  44.    FOR i := 1 to jmax DO BEGIN
  45.       FOR j := 1 to jmax DO write(u[i,j]:7:2);
  46.       writeln
  47.    END;
  48.    writeln;
  49.    writeln('Test that solution satisfies difference eqns:');
  50.    FOR i := 2 to (jmax-1) DO BEGIN
  51.       FOR j := 2 to (jmax-1) DO BEGIN
  52.          g[i,j] := -4.0*u[i,j]+u[i+1,j]
  53.             +u[i-1,j]+u[i,j-1]+u[i,j+1]
  54.       END;
  55.       write(' ':7);
  56.       FOR j := 2 to (jmax-1) DO write(g[i,j]:7:2);
  57.       writeln
  58.    END
  59. END.
  60.